package jmine.tec.subscription;

/**
 * Representa um conjunto de {@link Subscription}. Os {@link SubscriptionSet} podem opcionalmente 'expirar' para que {@link SubscriptionSet}
 * ociosas possam ser liberadas. Por padrao, um {@link SubscriptionSet} deve expirar apos {@value #DEFAULT_TIMEOUT_MILLIS} ms de tempo
 * ocioso.
 * 
 * @author takeshi
 */
public interface SubscriptionSet {

    long DEFAULT_TIMEOUT_MILLIS = 600000;

    /**
     * Devolve o token unico deste subcriptionSet
     * 
     * @return long
     */
    long getToken();

    /**
     * Devolve quando este SubcriptionSet ira expirar. Pode devolver -1 se o {@link SubscriptionSet} nao expira
     * 
     * @return long
     */
    long nextTimeout();

    /**
     * Devolve a versao deste {@link SubscriptionSet}. A versao deve refletir atualizacoes em {@link Subscription}s contidas.
     * 
     * @return long
     */
    long getVersion();

    /**
     * Devolve <code>true</code>
     * 
     * @return boolean
     */
    boolean isExpired();
}
